00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 if ( !defined("PATH_TO_ROOT") ) {
00025 define( "PATH_TO_ROOT", "../../" );
00026 }
00027
00028 class RessourcenDB {
00029 private $fileManager = null;
00030
00031 public function __construct( $fileManager = null ) {
00032 $this->fileManager = $fileManager;
00033 }
00034
00035 public function setFileManager( $filemanager ) {
00036 $this->fileManager = $filemanager;
00037 }
00038
00039 public static function getVisibilityConstraintSQL() {
00040 global $db, $settings;
00041 $time = Data::toMysql( time() );
00042 $userid = Data::toMysql( $_SESSION["userid"] );
00043 $sql_add = "";
00044 if ($_SESSION['usergroup'] == STUDENT || $_SESSION['usergroup'] == ALUMNUS || $_SESSION['usergroup'] == SCHUELER || $_SESSION['usergroup'] == GAST || $_SESSION["usergroup"] == SEKRETARIAT) {
00045 $sql_add = "AND ((filelist.userID='".$userid."' OR (start_time<'$time' AND end_time>'$time' AND visible_type=1))";
00046 if (isset($_SESSION["assistent"]))
00047 $sql_add = "AND ((visible_type<='2' OR filelist.userID='".$userid."')";
00048 $visibleFiles = $db->get_col("SELECT fileID FROM filevisible WHERE userID='".$userid."'");
00049 if ($db->num_rows) $sql_add.= " OR fileID IN (".implode(",", $visibleFiles) .")";
00050 $sql_add.= ")";
00051 }
00052 return $sql_add;
00053 }
00054
00055 public function getSubFolder( $p_folder ) {
00056 global $db;
00057 $sql_add = self::getVisibilityConstraintSQL();
00058 $folderID = Data::toMysql( $p_folder->getID() );
00059 $folders_db = (array) $db->get_results("SELECT courseID, create_time, description, student_write, userID, fileID, link, visible_type, name FROM filelist WHERE parent_object='".$folderID."' AND courseID='".Data::toMysql( $_SESSION['course'] )."' AND type='folder' $sql_add ORDER BY link");
00060 $folders = array();
00061 foreach ( $folders_db as $folder_db ) {
00062 $folder = $this->getFolderObject( $folder_db );
00063 $folder->setParentFolder( $p_folder );
00064 $folder->setFolderState( $db->get_var("SELECT userID FROM filetreelayout WHERE userID='".Data::toMysql( $_SESSION['userid'] )."' AND folderID='".Data::toMysql( $folder_db->fileID )."'") );
00065 $folders[] = $folder;
00066 }
00067 return $folders;
00068 }
00069
00070 public static function saveFolderState( $folder ) {
00071 global $db;
00072 $folderState = $folder->getFolderState();
00073 $userid = Data::toMysql( $_SESSION['userid'] );
00074 $folderID = Data::toMysql( $folder->getID() );
00075 if ($folderState) {
00076 $db->query("DELETE FROM filetreelayout WHERE userID='".$userid."' AND folderID='".$folderID."'");
00077 $folder->setFolderState(false);
00078 } else {
00079 $db->query("INSERT INTO filetreelayout (userID, folderID) VALUES ('".$userid."','".$folderID."')");
00080 $folder->setFolderState(true);
00081 }
00082 }
00083
00084 private function getFileObject( $db_object ) {
00085 $file = new File();
00086 $file->setFileID ( $db_object->fileID );
00087 $file->setVisibleType ( $db_object->visible_type );
00088 $file->setUserID ( $db_object->userID );
00089 $file->setName ( $db_object->name );
00090 $file->setOrigFileName ( $db_object->orig_filename );
00091 $file->setType ( $db_object->type );
00092 $file->setLink ( $db_object->link );
00093 $file->setSize ( $db_object->size );
00094 $file->setCounter ( $db_object->counter );
00095 $file->setCreateTime ( $db_object->create_time );
00096 $file->setDescription ( $db_object->description );
00097 $file->setExtension ( $db_object->extension );
00098 $file->setCourseID ( $db_object->courseID );
00099 $file->setFileManager( $this->fileManager );
00100 return $file;
00101 }
00102
00103 private function getFolderObject( $folder_db ) {
00104 $folder = new Folder( $folder_db->fileID );
00105 $folder->setCourseID( $folder_db->courseID );
00106 $folder->setUserID( $folder_db->userID );
00107 $folder->setLink( $folder_db->link );
00108 $folder->setVisibleType( $folder_db->visible_type );
00109 $folder->setName( $folder_db->name );
00110 $folder->setStudentWrite( $folder_db->student_write );
00111 $folder->setCreateTime( $folder_db->create_time );
00112 $folder->setDescription( $folder_db->description );
00113 $folder->setFileManager( $this->fileManager );
00114 return $folder;
00115 }
00116
00117 public function getFiles( $folderID, $sortString = "create_time" , $desc = false ) {
00118 global $db;
00119 $course = Data::toMysql( $_SESSION["course"] );
00120 $direction = ( $desc ) ? "DESC" : "ASC";
00121 $sortString = Data::toMysql( $sortString );
00122 $folderID = Data::toMysql( $folderID );
00123
00124 $sql_add = self::getVisibilityConstraintSQL();
00125 if ( $sortString == "userID" ) {
00126 $files_db = (array) $db->get_results("SELECT fileID, visible_type, userID, name, orig_filename, type, link, size, counter, create_time, description, extension, courseID FROM filelist LEFT OUTER JOIN user ON (filelist.userID=user.ID) WHERE parent_object='".$folderID."' AND (courseID=$course OR courseID=0) AND type!='folder' $sql_add ". " ORDER BY user.Nachname " . $direction);
00127 } else {
00128 $files_db = (array) $db->get_results("SELECT fileID, visible_type, userID, name, orig_filename, type, link, size, counter, create_time, description, extension, courseID FROM filelist WHERE parent_object='".$folderID."' AND (courseID='$course' OR courseID=0) AND type!='folder' ".$sql_add." ORDER BY ".$sortString. " ". $direction);
00129 }
00130 $files = array();
00131 foreach ( $files_db as $file_db ) {
00132 $files[] = self::getFileObject( $file_db );
00133 }
00134 return $files;
00135 }
00136
00137 public function getNewestFiles( $limit = 20 ) {
00138 global $db;
00139 $time = time();
00140 $course = Data::toMysql( $_SESSION["course"] );
00141 $limit = Data::toMysql( $limit );
00142 $files_db = (array) $db->get_results("SELECT fileID, visible_type, userID, name, orig_filename, type, link, size, counter, create_time, description, extension, courseID FROM filelist WHERE courseID='$course' AND visible_type=1 AND type!='folder' AND start_time<'$time' AND end_time>'$time' ORDER BY create_time DESC LIMIT $limit");
00143 $files = array();
00144 foreach ( $files_db as $file_db ) {
00145 $files[] = self::getFileObject( $file_db );
00146 }
00147 return $files;
00148 }
00149
00150 public function getMostRatedFiles( $limit = 20 ) {
00151 global $db;
00152 $time = time();
00153 $course = Data::toMysql( $_SESSION["course"] );
00154 $limit = Data::toMysql( $limit );
00155 $files_db = (array) $db->get_results("SELECT fileID, visible_type, userID, name, orig_filename, type, link, size, counter, create_time, description, extension, courseID FROM filelist WHERE courseID='$course' AND visible_type=1 AND type!='folder' AND start_time<'$time' AND end_time>'$time' ORDER BY counter DESC LIMIT $limit");
00156 $files = array();
00157 foreach ( $files_db as $file_db ) {
00158 $files[] = self::getFileObject( $file_db );
00159 }
00160 return $files;
00161 }
00162
00163 public function getFileByID( $fileID ) {
00164 global $db;
00165 $fileID = Data::toMysql( $fileID );
00166 $file_db = $db->get_row("SELECT fileID, visible_type, userID, name, orig_filename, type, link, size, counter, create_time, description, extension, courseID FROM filelist WHERE fileID = '$fileID' AND type='file'");
00167 if ( $file_db ) {
00168 return $this->getFileObject( $file_db );
00169 }
00170 return false;
00171 }
00172
00173
00174 public function getFolderByID( $folderID ) {
00175 global $db;
00176 $folderID = Data::toMysql( $folderID );
00177 $folder_db = $db->get_row("SELECT name, fileID, courseID, link, userID, student_write, create_time, description, visible_type FROM filelist WHERE type='folder' AND fileID='".$folderID."'");
00178 if ( $folder_db ) {
00179 return $this->getFolderObject( $folder_db );
00180 }
00181 return false;
00182 }
00183
00184 public function getUserCourses( $userID ) {
00185 global $settings, $db;
00186 $userID = Data::toMysql( $userID );
00187 $courseID = Data::toMysql( $_SESSION['course'] );
00188 if ($_SESSION['usergroup'] == ADMIN || $_SESSION['usergroup'] == SEKRETARIAT) $sql = "SELECT c.ID, c.ShortName AS SN, u.ShortName
00189 FROM courses AS c
00190 RIGHT JOIN user_course AS uc
00191 ON c.ID = uc.courseID
00192 LEFT JOIN user AS u
00193 ON uc.userID = u.ID
00194 WHERE ((u.Usergroup = 3 AND uc.differentUsergroup = 0)
00195 OR uc.differentUsergroup = 3)
00196 AND c.closed = 0 " .
00197 "AND c.ID <> ". $courseID ."
00198 ORDER BY c.ShortName, c.ID";
00199 else $sql = "SELECT c.ID, c.ShortName AS SN, u.ShortName
00200 FROM (user_course AS uc1, user AS u)
00201 RIGHT JOIN user_course AS uc2
00202 ON uc1.courseID = uc2.courseID
00203 RIGHT JOIN courses AS c
00204 ON uc1.courseID = c.ID
00205 WHERE ((u.Usergroup = 3 AND uc2.differentUsergroup = 0)
00206 OR uc2.differentUsergroup = 3)
00207 AND uc1.userID = ".$userID."
00208 AND u.ID = uc2.userID
00209 AND c.closed = 0 " .
00210 "AND c.ID <> ". $courseID ."
00211 ORDER BY c.ShortName, c.ID";
00212 $courses = (array) $db->get_results($sql);
00213
00214 return $courses;
00215 }
00216
00217 function countSubElements($folderID, $subFolders = true) {
00218 global $db;
00219 $count = 0;
00220 $folderID = Data::toMysql( $folderID );
00221 $sql_add = self::getVisibilityConstraintSQL();
00222 if ($subFolders) {
00223 $folders = $db->get_col("SELECT fileID FROM filelist WHERE type='folder' AND parent_object='".$folderID."' ".$sql_add);
00224 if ($folders) foreach($folders as $folder) {
00225 $count+= $this->countSubElements($folder);
00226 }
00227 }
00228 $count+= $db->get_var("SELECT COUNT(*) FROM filelist WHERE type!='folder' AND parent_object='$folderID' $sql_add");
00229 return $count;
00230 }
00231
00232
00239 function getCourseShortNameByID($courseID) {
00240 global $db;
00241
00242 $courseID = Data::toMysql($courseID);
00243
00244 return $db->get_var("SELECT `ShortName` FROM `courses` WHERE `ID` = $courseID");
00245 }
00246
00254 public function logResourceDownload($resourceID) {
00255 global $db;
00256
00257 $time = Data::toMysql(time());
00258 $resourceID = Data::toMysql($resourceID);
00259 $db->query("INSERT INTO filelog (userID, fileID, date) VALUES ('".$_SESSION['userid']."','$resourceID','$time')");
00260 $db->query("UPDATE filelist SET counter=counter+1 WHERE fileID='$resourceID'");
00261 }
00262 }